package 康复训练_JavaGo并驾齐驱;

public class Jz03数组中重复的数字 {

    /**
     * 在一个长度为 n 的数组 nums 里的所有数字都在 0～n-1 的范围内。
     * 数组中某些数字是重复的，但不知道有几个数字重复了，也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
     */

    public int findRepeatNumber(int[] nums) {
        return dg(nums, 0);
    }

    private int dg(int[] nums, int index) {
        if (index >= nums.length) {
            return -1;
        }
        int num = nums[index];
        if (num == nums[num] && num == index) {
            return dg(nums, index + 1);
        }
        if (num == nums[num]) {
            return num;
        }
        int temp = nums[num];
        nums[num] = num;
        nums[index] = temp;
        // 用while实现更清晰
        return dg(nums, index);
    }

    public static void main(String[] args) {
        Jz03数组中重复的数字 n = new Jz03数组中重复的数字();
        int[] arr = {0,1,2,3,4,5,6,6};
        int result = n.findRepeatNumber(arr);
        System.out.println(result);
    }

}
